/*
 * All rights Reserved, Designed By www.goldbeacon.cn
 * @Title:  demo
 * @Package cn.goldbeacon.demo.common.util
 * @author: zoujie
 * @date:   2021/8/1115:17
 * @version V1.0
 * Copyright © 2021 www.goldbeacon.cn. All Rights Reserved.
 * 注意：本内容仅限于湖南金烽信息科技有限公司内部传阅，禁止外泄以及用于其他的商业目
 */
package com.chenzhengrong.demospringboot.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Locale;

/**
 * @author zoujie
 * @title: I18nUtils
 * @description: 多语言工具栏
 * @date 2021/8/1115:17
 */
@Slf4j
@Component
public class I18nUtils {

    private static MessageSource messageSource;

    @Resource(name = "messageSource")
    public void setMessageSource(MessageSource messageSource) {
        I18nUtils.messageSource = messageSource;
    }

    /**
     * 获得多语言内容，默认根据当前用户的Local获取
     * @param key 多语言key
     * @return 翻译后的值，如获取不到则返回key
     */
    public static String getMessage(String key){
        return getMessage(key,new Object[]{});
    }

    /**
     * 获取多语言内容--带默认值，默认根据当前用户的Local获取
     * @param key 多语言key
     * @param defaultMsg 默认返回值
     * @return 翻译后的值，获取不到返回默认值
     */
    public static String getMessage(String key, String defaultMsg) {
        return getMessage(key, defaultMsg, new Object[]{});
    }

    /**
     * 获得多语言内容--带参数,默认根据当前用户的Local获取
     * @param key 多语言key
     * @param params 参数
     * @return 翻译后的值，如获取不到则返回key
     */
    public static String getMessage(String key, Object[] params) {
        if (params == null) {
            params = new Object[]{};
        }
        return getMessage(key, params, getLocale());
    }

    /**
     * 获得多语言内容--带参数--带默认值,默认根据当前用户的Local获取
     * @param key 多语言key
     * @param defaultMsg 默认返回值
     * @param params 参数
     * @return 翻译后的值，获取不到返回默认值
     */
    public static String getMessage(String key,String defaultMsg,Object[] params){
        return getMessage(key, params, defaultMsg, getLocale());
    }

    /**
     * 获取多语言数据
     * @param key 多语言key
     * @param params 参数
     * @param locale 语言信息
     * @return 翻译后的值
     */
    public static String getMessage(String key, Object[] params, Locale locale) {
        try {
            return messageSource.getMessage(key, params, locale);
        } catch (Exception e) {
            log.error("get locale msg error", e);
        }
        return key;
    }

    /**
     * 获取多语言数据
     * @param key 多语言key
     * @param params 参数
     * @param defaultMsg 默认返回值
     * @param locale 语言信息
     * @return 翻译后的值
     */
    public static String getMessage(String key, Object[] params, String defaultMsg, Locale locale) {
        return messageSource.getMessage(key, params, defaultMsg, locale);
    }

    /**
    * @description: 获取当前语言
    * @return java.util.Locale
    * @author zoujie
    * @date 2021/8/11 15:29
    */
    private static Locale getLocale(){
        return LocaleContextHolder.getLocale();
    }
}
